/*
 * Botonera.cpp
 *
 *  Created on: 08/10/2009
 *      Author: ale
 */

#include "Botonera.h"
#include "../src/Punto.h"

Botonera::Botonera() {
	botones.push_back(Boton(0));
	for (int j = 7; j < 10; j++)
		botones.push_back(Boton(j));
	for (int j = 4; j < 7; j++)
		botones.push_back(Boton(j));
	for (int j = 1; j < 4; j++)
		botones.push_back(Boton(j));
	std::vector<Punto> puntos;
	/*Panel principal*/
	puntos.push_back(Punto(0, 0));
	puntos.push_back(Punto(W_PANEL_PPL, 0));
	puntos.push_back(Punto(W_PANEL_PPL, H_PANEL_PPL));
	puntos.push_back(Punto(0, H_PANEL_PPL));
	puntos.push_back(Punto(0, 0));
	paneles.push_back(Poligono(puntos));
	paneles[PANEL_PPL].setColorPintura(Color(GRIS));
	paneles[PANEL_PPL].setColorLinea(Color(GRIS));
	puntos.clear();
	/*Panel botones*/
	puntos.push_back(Punto(0, 0));
	puntos.push_back(Punto(W_PANEL_BOTONES, 0));
	puntos.push_back(Punto(W_PANEL_BOTONES, H_PANEL_BOTONES - 30));
	puntos.push_back(Punto(W_PANEL_BOTONES - 20, H_PANEL_BOTONES));
	puntos.push_back(Punto(20, H_PANEL_BOTONES));
	puntos.push_back(Punto(0, H_PANEL_BOTONES - 30));
	puntos.push_back(Punto(0, 0));
	paneles.push_back(Poligono(puntos));
	paneles[PANEL_BOT].setColorPintura(Color(GRIS_CLARO));

}

Botonera::~Botonera() {
}

Boton& Botonera::operator[](int i) {
	return botones[i];
}
void Botonera::pintar(Matriz3D& mat) {

	Matriz3D Tb, Tf, Tc, T0, *a, *b, *d;
	Tb.setTraslacion(Punto(20, 30));

	paneles[PANEL_PPL].pintar(mat);
	a = mat * Tb;
	paneles[PANEL_BOT].pintar(*a);
	delete a;
	unsigned num = 1;
	/*Pongo los botones del 1..9 en su lugar*/
	for (int f = 0; f < 3; f++) {
		if (f == 0)
			Tf.setTraslacion(Punto(0, 100));
		else
			Tf.setTraslacion(Punto(0, 90 + 10 * (f + 1) + H_BOTON * f));

		for (int c = 0; c < 3; c++) {
			if (c == 0)
				Tc.setTraslacion(Punto(10, 0));
			else
				Tc.setTraslacion(Punto(10 * (c + 1) + W_BOTON * c, 0));
			a = Tf * Tc;
			b = (*a) * Tb;
			d = mat * (*b);
			botones[num].pintar(*d);
			num++;
			delete a;
			delete b;
			delete d;
		}
	}
	T0.setTraslacion(Punto(H_BOTON + 20, 10));
	a = T0 * Tb;
	b = mat * (*a);
	botones[0].pintar(*b);
	delete a;
	delete b;
}

void Botonera::dibujarContorno(Matriz3D& mat) {

	Matriz3D Tb, Tf, Tc, T0, *a, *b, *d;
	Tb.setTraslacion(Punto(20, 30));

	paneles[PANEL_PPL].dibujarContorno(mat);
	a = mat * Tb;
	paneles[PANEL_BOT].dibujarContorno(*a);
	delete a;
	unsigned num = 1;
	/*Pongo los botones del 1..9 en su lugar*/
	for (int f = 0; f < 3; f++) {
		if (f == 0)
			Tf.setTraslacion(Punto(0, 100));
		else
			Tf.setTraslacion(Punto(0, 90 + 10 * (f + 1) + H_BOTON * f));

		for (int c = 0; c < 3; c++) {
			if (c == 0)
				Tc.setTraslacion(Punto(10, 0));
			else
				Tc.setTraslacion(Punto(10 * (c + 1) + W_BOTON * c, 0));

			a = Tf * Tc;
			b = (*a) * Tb;
			d = mat * (*b);
			botones[num].dibujarContorno(*d);
			num++;
			delete a;
			delete b;
			delete d;
		}
	}
	T0.setTraslacion(Punto(H_BOTON + 20, 10));
	a = T0 * Tb;
	b = mat * (*a);
	botones[0].dibujarContorno(*b);
	delete a;
	delete b;

}

